<html>
  <head>
    <title>
      启用事件发件箱
    </title>
  </head>
  <body>
    <script>
      /*
           2、启用事件发件箱

                                            启用事件发件箱取决于你的数据库提供程序。

                                            ①、为 EF Core 启用事件发件箱、

                                                    打开你的DbContext 类，实现 IHasEventOutBox 接口。你最终应该通过将DbSet属性添加到你的DbContext类中：、

                                                            public DbSet<OutgoingEventRecord> OutgoingEvents { get; set; }

                                                    在DbContext类的 OnModelCreating方法中添加一下行：

                                                            builder.ConfigureEventOutBox();

                                                    使用标准的 Add-Migration 和 Update-DataBase 命令将更改应用到数据库中。
                                                    
                                                    如果要使用命行终端，请在数据库继承项目根目录下运行以下命令：
                                                        
                                                            dotnet ef migrations add "Added_Event_Outbox"
                                                            dotnet ef database update
                                                    最后，在模块类的 ConfigureServices方法中变一下以下代码进行配置(将YourDbContext替换成你自己的DbContext类)：

                                                             Configure<AbpDistributedEventBusOptions>(options =>  // 分布式事件总线配置类
                                                            {
                                                                options.Outboxes.Configure(config =>  // 配置分布式发件箱
                                                                {
                                                                    config.UseDbContext<YourDbContext>(); // 配置针对的数据库
                                                                });
                                                            });

                                            ②、为MongoDB启用事件发件箱

                                                    。。。。。。。

                                            ③、发件箱分布式锁：

                                                        ★、重要注意：

                                                        发件箱服务使用分布式锁，以确保只有你的应用程序的单个实例同时消耗发件箱队列。

                                                        分布式锁定键应该是每个数据库唯一的。 
                                                        
                                                        config对象（在options.Outboxes.Configure(...)方法中）有DatabaseName属性，该属性用于分布式锁定键以确保唯一性。

                                                        DatabaseName由UseDbContext方法自动设置，从YourDbContext类的ConnectionStringName属性中获取库名。

                                                        因此，如果你的系统中有多个数据库，请确保对同一数据库使用相同的连接字符串名称，但对不同的数据库使用不同的连接字符串名称。

                                                        如果不能确保，可以手动设置config.DatabaseName（在UseDbContext行之后）以确保唯一性。

      */
    </script>
  </body>
</html>